package UdpNetwork;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
/**
 * @Author Zhang Chao
 * @Date 2021/6/1 21:54
 * @Version 1.0
 */
public class ClientThread implements Runnable{

    @Override
    public void run() {
        try {
            ////////////////////发送消息////////////////////////
            // 创建一个Socket对象
            // localhost 和 127.0.0.1 表示本机  具体的IP地址；注意：客户端的端口号要和服务器端的一致
            // 使用datagramsocket建立连接
            DatagramSocket datagramSocket = new DatagramSocket();
            // 准备需要发送的数据
            String strClientMsg = "hello,I am 客户端";
            // 将发送的信息转换为字节数组，便于存入 datagrampacket
            byte[] data = strClientMsg.getBytes(StandardCharsets.UTF_8);
            // 使用datagrampacket进行数据封装
            DatagramPacket datagramPacket = new DatagramPacket(data, 0, data.length,new InetSocketAddress("127.0.0.1", 9091));
            // 发送数据
            datagramSocket.send(datagramPacket);
            System.out.println("客户端发送消息：" + strClientMsg);

            /////////////////////客户但接收服务器的消息////////////////////////////////
            // 获取客户端的socket的输入流对象
            // 将发送的信息转换为字节数组，便于存入 datagrampacket
            byte[] data1 = new byte[1024];
            // 使用datagrampacket进行数据封装
            DatagramPacket datagramPacket1 = new DatagramPacket(data1, 0, data1.length);
            // 接收数据
            datagramSocket.receive(datagramPacket1);
            // 接收的信息会存入 byte数组
            // 使用接收的信息进行 业务 逻辑处理
            String strReceiveMsg = new String(data1, 0,datagramPacket1.getLength(),"UTF-8");
            System.out.println("客户端接收消息：" + strReceiveMsg);

            // 关闭资源
            datagramSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
